package se.stabby.undersok.model;

import com.google.common.base.Preconditions;

/**
 * User: per.segersten
 * Date: 2014-05-11
 */
public class Svar {
    public final SvarId id;
    public final PågåendeUndersökningId pågåendeUndersökningsId;
    public final Fråga fråga;
    public final int val;
    public final Metadata metadata;

    private Svar(SvarId id, PågåendeUndersökningId pågåendeUndersökningsId, Fråga fråga, int val, Metadata metadata) {
        Preconditions.checkNotNull(id);
        Preconditions.checkNotNull(fråga);
        Preconditions.checkNotNull(pågåendeUndersökningsId);
        Preconditions.checkArgument(val>=0 && val<fråga.svarsalternativ.size());
        Preconditions.checkNotNull(metadata);

        this.id = id;
        this.pågåendeUndersökningsId = pågåendeUndersökningsId;
        this.fråga = fråga;
        this.val = val;
        this.metadata = metadata;
    }

    public static Builder create() {
        return new Builder();
    }

    public static class Builder {

        private SvarId id;
        private PågåendeUndersökningId pågåendeUndersökningsId;
        private Fråga fråga;
        private int val;
        private Metadata metadata;

        public Svar build() {
            return new Svar(id, pågåendeUndersökningsId, fråga, val, metadata);
        }

        public Builder id(SvarId id) {
            this.id = id;
            return this;
        }

        public Builder pågåendeUndersökningsId(PågåendeUndersökningId pågåendeUndersökningsId) {
            this.pågåendeUndersökningsId = pågåendeUndersökningsId;
            return this;
        }

        public Builder fråga(Fråga fråga) {
            this.fråga = fråga;
            return this;
        }

        public Builder val(int val) {
            this.val = val;
            return this;
        }

        public Builder metadata(Metadata metadata) {
            this.metadata = metadata;
            return this;
        }
    }
}
